/**
 * Created with IntelliJ IDEA.
 * Description：
 * User：user
 * DATE:2021-11-01
 * Time:14:32
 */

//fn+esc打开上面的f键
//alt+7显示源代码中的具体类
class UserException extends Exception {
    public UserException(String message) {
        super(message);
    }
}
class PasswordException extends Exception {
    public PasswordException(String message) {
        super(message);
    }
}
//自定义异常
//不能继承Exception,因为Exception范围较大，无法比较确定是受查异常还是非受查异常
//继承之后如果报错了采用两种异常处理方法进行相应的处理
//受查异常，编译时异常
class MyException2 extends Exception{
    //可以不带参数
    //也可以带参数
    //因为父类都具有
    public MyException2(String message) {
        super(message);
    }
}

//非受查异常运行时异常
class MyException extends RuntimeException{
    //可以不带参数
    //也可以带参数
    //因为父类都具有
    public MyException(String message) {
        super(message);
    }
}


public class TestDemo {


    public  static String name = "admin";
    public  static String password = "11123456";
    public static void main(String[] args) {
        try {
            login("admin", "123456");
        } catch (UserException userException) {
            userException.printStackTrace();
        } catch (PasswordException passwordException) {
            passwordException.printStackTrace();
        }
    }
    public static void login(String userName, String password) throws UserException,
            PasswordException {
        if (!TestDemo.name.equals(userName)) {
            //判断抛出异常，main函数进行异常的捕获
            throw new UserException("用户名错误");
        }
        if (!TestDemo.password.equals(password)) {
            //判断抛出异常main函数进行捕获异常；
            throw new PasswordException("密码错误");
        }
        System.out.println("登陆成功");
    }
    public static void main4(String[] args){
        //如果不加的话系统默认的是受查异常，一定要进行处理，或者是使用try--catch
        //原因是因为Myexception继承的是Exception，范围较大，系统包含受查异常和非受查异常
        try{
            int a = 10;
            if(a == 10)throw new  MyException2("haha");
        }catch(MyException2 e){
            e.printStackTrace();
        }

    }
    public static void main3(String[] args) throws MyException2 {
        //如果不加的话系统默认的是受查异常，一定要进行处理，或者是使用try--catch
        //原因是因为Myexception继承的是Exception，范围较大，系统包含受查异常和非受查异常
        int a = 10;
        if(a == 10){
            throw  new MyException2("yichang");
        }
    }
    public static void main2(String[] args) {
        int a = 10;
        if(a == 10){
            throw  new MyException("yichang");
        }
    }
    public static  void divi(int x) throws ArithmeticException{//函数后面声明可能会抛出异常
        if(x == 0){
            throw new ArithmeticException("X==0");//带有一个参数的构造方法，只是创建了一个异常类
        }
    }
    public static void main1(String[] args) {
        try{
            divi(0);
        }catch(ArithmeticException e){
            e.printStackTrace();
        }
        //finally中一般不要写return
        //对于类中的异常要么try--catch -- finally解决，有么在类的后面进行声明throws 异常类型
    }
}
